Skip to main content

TimeKORP – HackTheBox

Dificultad: Very Easy
Categoría: Web

Intro

🧨 Writeup - Very Easy Challenge (RCE)

En este Challenge de nivel Very easy de HackTheBox, abordamos un escenario de Remote Code Execution (RCE) aprovechando una vulnerabilidad en el parámetro format de una aplicación web.

Durante el análisis y explotación, seguimos un flujo directo y efectivo:

  • 🔍 Análisis del parámetro format identificando comportamientos anómalos
  • 🎯 Explotación RCE usando el parámetro vulnerable para ejecutar comandos y obtener la flag

Este writeup documenta los pasos esenciales para obtener la flag.

⚠️ Este contenido es exclusivamente educativo y está orientado a mejorar habilidades de pentesting ético.

🌐 Reconocimiento

Al acceder por primera vez a la IP del reto en el navegador, nos encontramos con una aplicación web que muestra la fecha y hora actual del servidor. La aplicación permite especificar el formato de visualización de la fecha mediante un parámetro.

Pagina principal

🔥 Explotación inicial

Durante la fase de ataque inicial, decidimos probar directamente si el parámetro format es vulnerable a inyección de comandos. Utilizamos un payload simple para intentar ejecutar el comando whoami en el servidor:

Payload utilizado:

';whoami'

URL completa:

http://94.237.54.192:55173/?format=';whoami'

Este payload intenta romper la sintaxis del comando date cerrando las comillas y ejecutando un comando adicional.

Explotación del parámetro format

🔍 Análisis del código vulnerable

Antes de proceder con la explotación, es importante entender por qué existe la vulnerabilidad RCE. Al analizar el código fuente de la aplicación, encontramos la clase TimeModel:

<?php
class TimeModel
{
public function __construct($format)
{
$this->command = "date '+" . $format . "' 2>&1";
}

public function getTime()
{
$time = exec($this->command);
$res = isset($time) ? $time : '?';
return $res;
}
}

¿Por qué hay RCE?

La vulnerabilidad se encuentra en la función __construct() donde el parámetro $format se concatena directamente al comando date sin ningún tipo de validación o sanitización:

  • Línea vulnerable: $this->command = "date '+" . $format . "' 2>&1";
  • Problema: El valor de $format se inserta directamente en el comando shell
  • Consecuencia: Un atacante puede romper la sintaxis del comando date e inyectar comandos adicionales

Ejemplo de explotación:

  • Input normal: format=Y-m-d → Comando: date '+Y-m-d' 2>&1
  • Input malicioso: format='; whoami' → Comando: date ''; whoami '' 2>&1

El comando resultante ejecutaría:

  1. date '' (Cerramos las primeras comillas, las de apertura)
  2. whoami (comando inyectado)
  3. '' (Aqui cerramos tambien las de que originalmente cerraban)

🏁 Obtención de la flag

Una vez confirmada la vulnerabilidad RCE, procedemos a buscar y leer la flag del sistema. Utilizamos el comando cat para leer el archivo /flag que típicamente contiene la flag en los challenges de HackTheBox:

Payload utilizado:

';cat /flag'

URL completa:

http://94.237.54.192:55173/?format=';cat /flag'

Este comando ejecuta cat /flag en el servidor, mostrándonos directamente el contenido de la flag.

Flag obtenida

✅ Reto completado

Después de explotar exitosamente la vulnerabilidad RCE a través del parámetro format, logramos ejecutar comandos en el sistema y obtener la flag del challenge.

Reto completado

¡Challenge completado! 🎉